USE master
GO
IF EXISTS(select * from sys.databases where name='DB_FUYAO')
DROP DATABASE DB_FUYAO
GO
CREATE DATABASE DB_FUYAO
GO
USE DB_FUYAO
GO

CREATE TABLE Vendedor
(
	VendedorID  int  IDENTITY (1,1) ,
	NombreVendedor  varchar(40)  NULL ,
	ApellidoVendedor  varchar(50)  NULL ,
	Estado  bit  NOT NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (VendedorID  ASC)
)
go


CREATE TABLE Cliente
(
	ClienteID  int  IDENTITY (1,1) ,
	CodigoCliente  varchar(20)  NULL ,
	NombreCliente  varchar(200)  NOT NULL ,
	Direccion  varchar(200)  NULL ,
	RUC  varchar(11)  NULL ,
	DNI  varchar(10)  NULL ,
	Telefono  varchar(30)  NULL ,
	Estado  bit  NOT NULL ,
	VendedorID  int  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (ClienteID  ASC),
	 FOREIGN KEY (VendedorID) REFERENCES Vendedor(VendedorID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Cliente ON Cliente
(
	VendedorID  ASC
)
go


CREATE TABLE Departamento
(
	DepartamentoID  int  NOT NULL ,
	Departamento  varchar(50)  NOT NULL ,
	 PRIMARY KEY   NONCLUSTERED (DepartamentoID  ASC)
)
go


CREATE TABLE Provincia
(
	ProvinciaID  int  NOT NULL ,
	Provincia  varchar(100)  NOT NULL ,
	DepartamentoID  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (ProvinciaID  ASC),
	 FOREIGN KEY (DepartamentoID) REFERENCES Departamento(DepartamentoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Provincia ON Provincia
(
	DepartamentoID  ASC
)
go


CREATE TABLE Distrito
(
	DistritoID  int  NOT NULL ,
	Distrito  varchar(50)  NOT NULL ,
	ProvinciaID  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (DistritoID  ASC),
	 FOREIGN KEY (ProvinciaID) REFERENCES Provincia(ProvinciaID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Distrito ON Distrito
(
	ProvinciaID  ASC
)
go


CREATE TABLE Direccion
(
	DireccionID  int  IDENTITY (1,1) ,
	Direccion  varchar(200)  NOT NULL ,
	ClienteID  int  NULL ,
	DepartamentoID  int  NULL ,
	ProvinciaID  int  NULL ,
	EsPrincipal  bit  NOT NULL ,
	DistritoID  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (DireccionID  ASC),
	 FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (DepartamentoID) REFERENCES Departamento(DepartamentoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (ProvinciaID) REFERENCES Provincia(ProvinciaID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (DistritoID) REFERENCES Distrito(DistritoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Direccion ON Direccion
(
	ClienteID  ASC
)
go


CREATE INDEX XIF2Direccion ON Direccion
(
	DepartamentoID  ASC
)
go


CREATE INDEX XIF3Direccion ON Direccion
(
	ProvinciaID  ASC
)
go


CREATE INDEX XIF4Direccion ON Direccion
(
	DistritoID  ASC
)
go


CREATE TABLE Conductor
(
	ConductorID  int  IDENTITY (1,1) ,
	NombreConductor  varchar(30)  NULL ,
	ApellidoConductor  varchar(100)  NULL ,
	LicenciaConducir  varchar(10)   NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	Estado  bit  NULL ,
	 PRIMARY KEY   NONCLUSTERED (ConductorID  ASC)
)
go


CREATE TABLE Menu
(
	MenuID  int  IDENTITY (1,1) ,
	NombreMenu  varchar(50)  NULL ,
	MenuPadreID  int  NULL ,
	Estado  bit  NOT NULL ,
	NombreFormulario  varchar(100)  NULL ,
	NombreImagen  varchar(100)  NULL ,
	 PRIMARY KEY   NONCLUSTERED (MenuID  ASC)
)
go


CREATE TABLE Perfil
(
	PerfilID  int  IDENTITY (1,1) ,
	DescripcionPerfil  varchar(50)  NOT NULL ,
	Estado  bit  NOT NULL ,
	 PRIMARY KEY   NONCLUSTERED (PerfilID  ASC)
)
go


CREATE TABLE MenuXPerfil
(
	MenuID  int  NOT NULL ,
	PerfilID  int  NOT NULL ,
	 PRIMARY KEY   NONCLUSTERED (MenuID  ASC,PerfilID  ASC),
	 FOREIGN KEY (MenuID) REFERENCES Menu(MenuID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (PerfilID) REFERENCES Perfil(PerfilID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1MenuXPerfil ON MenuXPerfil
(
	MenuID  ASC
)
go


CREATE INDEX XIF2MenuXPerfil ON MenuXPerfil
(
	PerfilID  ASC
)
go


CREATE TABLE Usuario
(
	UsuarioID  int  IDENTITY (1,1) ,
	Nombre  varchar(30)  NULL ,
	ApellidoPaterno  varchar(50)  NULL ,
	ApellidoMaterno  varchar(50)  NULL ,
	Telefono  varchar(10)  NULL ,
	UserName  varchar(20)  NOT NULL ,
	Password  varchar(20)  NOT NULL ,
	Estado  bit  NOT NULL ,
	PerfilID  int  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (UsuarioID  ASC),
	 FOREIGN KEY (PerfilID) REFERENCES Perfil(PerfilID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Usuario ON Usuario
(
	PerfilID  ASC
)
go


CREATE TABLE GuiaRemision
(
	GuiaRemisionID  int  IDENTITY (1,1) ,
	ClienteID  int  NULL ,
	Estado  int  NOT NULL ,
	Observacion  varchar(200)  NULL ,
	NroGuiaRemision  int  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	NroVenta1  int  NULL ,
	NroVenta2  int  NULL ,
	NroVenta3  int  NULL ,
	NroPedido  int  NULL ,
	PuntoPartida  varchar(100)  NULL ,
	PuntoLlegada  varchar(100)  NULL ,
	ModeloAuto  varchar(100)  NULL ,
	PlacaAuto  varchar(10)  NULL ,
	Brevete  varchar(10)  NULL ,
	NombreConductor  varchar(50)  NULL ,
	Serie  varchar(3)  NULL ,
	FechaIniTraslado  datetime  NULL ,
	NombreTransportista  varchar(100)  NULL ,
	RUCTransportista  varchar(11)  NULL ,
	MotivoTraslado  int  NULL ,
	DescMotivoTraslado  varchar(100)  NULL ,
	TipoComprobante char(1) NULL,
	 PRIMARY KEY   NONCLUSTERED (GuiaRemisionID  ASC),
	 FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1GuiaRemision ON GuiaRemision
(
	ClienteID  ASC
)
go


CREATE TABLE Producto
(
	ProductoID  int  IDENTITY (1,1) ,
	CodigoProducto  varchar(50)  NULL ,
	Caracteristica  varchar(50)  NULL ,
	Caracteristica2  varchar(50)  NULL ,
	DescripcionProducto  varchar(200)  NOT NULL ,
	Descuento  decimal(6,2)  NULL ,
	Estado  bit  NOT NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	ModificadoPor  int  NULL ,
	CreadoPor  int  NOT NULL ,
	Alto  decimal(6,2)  NULL ,
	Ancho  decimal(6,2)  NULL ,
	Cantidad  int  NULL ,
	EsParabrisaFrontal  bit  NULL ,
	Precio  decimal(6,2)  NULL ,
	CategoriaAuto  varchar(50)  NULL 
	 PRIMARY KEY   NONCLUSTERED (ProductoID  ASC)
)
go


CREATE TABLE DetalleGuiaRemision
(
	ProductoID  int  NOT NULL ,
	GuiaRemisionID  int  NOT NULL ,
	Cantidad  int  NOT NULL ,
	 PRIMARY KEY   NONCLUSTERED (ProductoID  ASC,GuiaRemisionID  ASC),
	 FOREIGN KEY (GuiaRemisionID) REFERENCES GuiaRemision(GuiaRemisionID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF2DetalleGuiaRemision ON DetalleGuiaRemision
(
	GuiaRemisionID  ASC
)
go


CREATE INDEX XIF3DetalleGuiaRemision ON DetalleGuiaRemision
(
	ProductoID  ASC
)
go


CREATE TABLE Pedido
(
	PedidoID  int  IDENTITY (1,1) ,
	Estado  int  NOT NULL ,
	Observacion  varchar(200)  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	CreadoPor  int  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	ModificadoPor  int  NULL ,
	NroPedido  int  NULL ,
	ManejadoPor  varchar(50)  NULL ,
	ClienteID  int  NOT NULL ,
	 PRIMARY KEY   NONCLUSTERED (PedidoID  ASC),
	 FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Pedido ON Pedido
(
	ClienteID  ASC
)
go


CREATE TABLE DetallePedido
(
	PedidoID  int  NOT NULL ,
	ProductoID  int  NOT NULL ,
	Cantidad  int  NULL ,
	PrecioUnitario  decimal(8,2)  NULL ,
	 PRIMARY KEY   NONCLUSTERED (PedidoID  ASC,ProductoID  ASC),
	 FOREIGN KEY (PedidoID) REFERENCES Pedido(PedidoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1DetallePedido ON DetallePedido
(
	PedidoID  ASC
)
go


CREATE INDEX XIF2DetallePedido ON DetallePedido
(
	ProductoID  ASC
)
go


CREATE TABLE Parametro
(
	ParametroID  int  IDENTITY (1,1) ,
	TableName  varchar(50)  NULL ,
	Valor  varchar(50)  NOT NULL ,
	Nombre  varchar(50)  NOT NULL ,
	Notas  varchar(100)  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	 PRIMARY KEY   NONCLUSTERED (ParametroID  ASC)
)
go


CREATE TABLE Venta
(
	VentaID  int  IDENTITY (1,1) ,
	ClienteID  int  NOT NULL ,
	MontoTotal  decimal(8,2)  NULL ,
	TipoVenta  char(1)  NOT NULL ,
	Descuento  decimal(8,2)  NULL ,
	VendedorID  int  NOT NULL ,
	PedidoID  int  NULL ,
	Estado  int  NOT NULL ,
	FormaPago  int  NOT NULL ,
	GuiaRemisionID  int  NULL ,
	IGV  decimal(4,2)  NULL ,
	Serie  varchar(3)  NOT NULL ,
	FechaPago  datetime  NULL ,
	FechaCreacion  datetime  NOT NULL ,
	FechaModificacion  datetime  NULL ,
	CreadoPor  int  NOT NULL ,
	ModificadoPor  int  NULL ,
	NroVenta  int  NOT NULL ,
	TipoMoneda  int  NOT NULL ,
	Observaciones  varchar(200)  NULL ,
	 PRIMARY KEY   NONCLUSTERED (VentaID  ASC),
	 FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (VendedorID) REFERENCES Vendedor(VendedorID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (PedidoID) REFERENCES Pedido(PedidoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (GuiaRemisionID) REFERENCES GuiaRemision(GuiaRemisionID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF1Venta ON Venta
(
	ClienteID  ASC
)
go


CREATE INDEX XIF4Venta ON Venta
(
	VendedorID  ASC
)
go


CREATE INDEX XIF5Venta ON Venta
(
	PedidoID  ASC
)
go


CREATE INDEX XIF6Venta ON Venta
(
	GuiaRemisionID  ASC
)
go


CREATE TABLE DetalleVenta
(
	ProductoID  int  NOT NULL ,
	VentaID  int  NOT NULL ,
	Cantidad  int  NOT NULL ,
	Descuento  decimal(6,2)  NULL ,
	PrecioUnitario  decimal(6,2)  NULL ,
	 PRIMARY KEY   NONCLUSTERED (ProductoID  ASC,VentaID  ASC),
	 FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION,
 FOREIGN KEY (VentaID) REFERENCES Venta(VentaID)
		ON DELETE NO ACTION
		ON UPDATE NO ACTION
)
go


CREATE INDEX XIF2DetalleVenta ON DetalleVenta
(
	ProductoID  ASC
)
go


CREATE INDEX XIF3DetalleVenta ON DetalleVenta
(
	VentaID  ASC
)
go


